package cn.com.huzo.service.tech;

import cn.com.huzo.model.entities.tech.MrpLinesAssortmentEntity;
import cn.com.huzo.model.entities.tech.MrpLinesResultEntity;
import huzofw.service.GenericManager;
import java.util.List;
import java.util.Map;

/**
 * 物料需求计划-材料搭配明细管理服务对象接口。
 *
 * @author 吴旭
 */
public interface MrpLinesAssortmentManager extends GenericManager<MrpLinesAssortmentEntity, String> {

    /**
     * 取得该材料（搭配类型）的物料需求明细。
     *
     * @param headerId 材料物料需求计划标识
     * @return 物料需求搭配明细
     * @throws java.lang.Exception
     */
    List<MrpLinesAssortmentEntity> fetchAssortmentByHeaderId(Long headerId) throws Exception;

    /**
     * 针对材料的搭配类型进行搭配计算、同时更新搭配明细记录的搭配类型。
     * <p>
     * @param itemList 要计算的数据
     * @return 搭配后的数据
     * @throws java.lang.Exception
     */
    Map<String, Object> batchAssort(List<MrpLinesAssortmentEntity> itemList) throws Exception;

    /**
     * 同步单耗表明细
     *
     * @param headerId 物料需求计划标识
     * @param bomHeaderId 计算用单耗标识
     * @param moHeaderId 计算用生产指示书标识
     * @param styleNo 计算用款号
     * @param updatedBy 更新者或操作者
     * @return
     * @throws java.lang.Exception
     */
    Map<String, Object> updateLinesForSyncBom(Long headerId, Long bomHeaderId, Long moHeaderId, String styleNo, Long updatedBy) throws Exception;

    /**
     * 用历史数据更新（一般成衣有这种需求，追单的情况，同款追单）
     *
     * @param criterion 历史数据及当前数据标识
     * @return 影响的行数
     * @throws Exception
     */
    Integer updateByHistoryData(Map<String, Object> criterion) throws Exception;
}
